package com.jiashihui.schema_lgorithm.spring.aspect.asp;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * @author jiashihui
 * @describe: 切面的实现类，AspectJ框架允许我们的切面是一个POJO类，这样就避免了spring框架Api的侵染，
 *              另外AspectJ框架比之前多出了一个最终通知，就是不管目标方法执行与否，最终通知的方法都会执行，有点类似finally语句快。
 * @date 2019/03/28
 */
public class MyAspect {
    //前置通知方法
    public void myBefore() {
        System.out.println("执行前置通知方法");
    }
    // 后置通知方法
    public void myAfterReturning() {
        System.out.println("执行后置通知方法");
    }
    // 环绕通知方法
    public Object myAround(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("执行环绕通知方法");
        Object[] args = pjp.getArgs();
        int a = (int)args[0];
        int b = (int)args[1];
        if(b == 0){
            System.err.println("除数不能为0");
            return -1;
        }
        if(a == 0){
            return 0;
        }
        return pjp.proceed();
    }
    // 最终通知
    public void myAfter() {
        System.out.println("执行最终通知");
    }
}
